/*
 * Selling Partner API for Easy Ship
 * The Selling Partner API for Easy Ship helps you build applications that help sellers manage and ship Amazon Easy Ship orders.  Your Easy Ship applications can:  * Get available time slots for packages to be scheduled for delivery.  * Schedule, reschedule, and cancel Easy Ship orders.  * Print labels, invoices, and warranties.  See the [Marketplace Support Table](doc:easyship-api-v2022-03-23-use-case-guide#marketplace-support-table) for the differences in Easy Ship operations by marketplace.
 *
 * OpenAPI spec version: 2022-03-23
 * 
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 */


package com.amazon.spapi.model.easy_ship_model;

import java.util.Objects;
import java.util.Arrays;
import com.amazon.spapi.model.easy_ship_model.Dimensions;
import com.amazon.spapi.model.easy_ship_model.InvoiceData;
import com.amazon.spapi.model.easy_ship_model.Items;
import com.amazon.spapi.model.easy_ship_model.PackageStatus;
import com.amazon.spapi.model.easy_ship_model.ScheduledPackageId;
import com.amazon.spapi.model.easy_ship_model.TimeSlot;
import com.amazon.spapi.model.easy_ship_model.TrackingDetails;
import com.amazon.spapi.model.easy_ship_model.Weight;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.IOException;

/**
 * A package. This object contains all the details of the scheduled Easy Ship package including the package identifier, physical attributes such as dimensions and weight, selected time slot to handover the package to carrier, status of the package, and tracking/invoice details.
 */
@ApiModel(description = "A package. This object contains all the details of the scheduled Easy Ship package including the package identifier, physical attributes such as dimensions and weight, selected time slot to handover the package to carrier, status of the package, and tracking/invoice details.")
@javax.annotation.Generated(value = "io.swagger.codegen.languages.JavaClientCodegen", date = "2023-05-03T23:27:49.111-04:00")
public class ModelPackage {
  @SerializedName("scheduledPackageId")
  private ScheduledPackageId scheduledPackageId = null;

  @SerializedName("packageDimensions")
  private Dimensions packageDimensions = null;

  @SerializedName("packageWeight")
  private Weight packageWeight = null;

  @SerializedName("packageItems")
  private Items packageItems = null;

  @SerializedName("packageTimeSlot")
  private TimeSlot packageTimeSlot = null;

  @SerializedName("packageIdentifier")
  private String packageIdentifier = null;

  @SerializedName("invoice")
  private InvoiceData invoice = null;

  @SerializedName("packageStatus")
  private PackageStatus packageStatus = null;

  @SerializedName("trackingDetails")
  private TrackingDetails trackingDetails = null;

  public ModelPackage scheduledPackageId(ScheduledPackageId scheduledPackageId) {
    this.scheduledPackageId = scheduledPackageId;
    return this;
  }

   /**
   * Get scheduledPackageId
   * @return scheduledPackageId
  **/
  @ApiModelProperty(required = true, value = "")
  public ScheduledPackageId getScheduledPackageId() {
    return scheduledPackageId;
  }

  public void setScheduledPackageId(ScheduledPackageId scheduledPackageId) {
    this.scheduledPackageId = scheduledPackageId;
  }

  public ModelPackage packageDimensions(Dimensions packageDimensions) {
    this.packageDimensions = packageDimensions;
    return this;
  }

   /**
   * Get packageDimensions
   * @return packageDimensions
  **/
  @ApiModelProperty(required = true, value = "")
  public Dimensions getPackageDimensions() {
    return packageDimensions;
  }

  public void setPackageDimensions(Dimensions packageDimensions) {
    this.packageDimensions = packageDimensions;
  }

  public ModelPackage packageWeight(Weight packageWeight) {
    this.packageWeight = packageWeight;
    return this;
  }

   /**
   * Get packageWeight
   * @return packageWeight
  **/
  @ApiModelProperty(required = true, value = "")
  public Weight getPackageWeight() {
    return packageWeight;
  }

  public void setPackageWeight(Weight packageWeight) {
    this.packageWeight = packageWeight;
  }

  public ModelPackage packageItems(Items packageItems) {
    this.packageItems = packageItems;
    return this;
  }

   /**
   * Get packageItems
   * @return packageItems
  **/
  @ApiModelProperty(value = "")
  public Items getPackageItems() {
    return packageItems;
  }

  public void setPackageItems(Items packageItems) {
    this.packageItems = packageItems;
  }

  public ModelPackage packageTimeSlot(TimeSlot packageTimeSlot) {
    this.packageTimeSlot = packageTimeSlot;
    return this;
  }

   /**
   * Get packageTimeSlot
   * @return packageTimeSlot
  **/
  @ApiModelProperty(required = true, value = "")
  public TimeSlot getPackageTimeSlot() {
    return packageTimeSlot;
  }

  public void setPackageTimeSlot(TimeSlot packageTimeSlot) {
    this.packageTimeSlot = packageTimeSlot;
  }

  public ModelPackage packageIdentifier(String packageIdentifier) {
    this.packageIdentifier = packageIdentifier;
    return this;
  }

   /**
   * Get packageIdentifier
   * @return packageIdentifier
  **/
  @ApiModelProperty(value = "")
  public String getPackageIdentifier() {
    return packageIdentifier;
  }

  public void setPackageIdentifier(String packageIdentifier) {
    this.packageIdentifier = packageIdentifier;
  }

  public ModelPackage invoice(InvoiceData invoice) {
    this.invoice = invoice;
    return this;
  }

   /**
   * Get invoice
   * @return invoice
  **/
  @ApiModelProperty(value = "")
  public InvoiceData getInvoice() {
    return invoice;
  }

  public void setInvoice(InvoiceData invoice) {
    this.invoice = invoice;
  }

  public ModelPackage packageStatus(PackageStatus packageStatus) {
    this.packageStatus = packageStatus;
    return this;
  }

   /**
   * Get packageStatus
   * @return packageStatus
  **/
  @ApiModelProperty(value = "")
  public PackageStatus getPackageStatus() {
    return packageStatus;
  }

  public void setPackageStatus(PackageStatus packageStatus) {
    this.packageStatus = packageStatus;
  }

  public ModelPackage trackingDetails(TrackingDetails trackingDetails) {
    this.trackingDetails = trackingDetails;
    return this;
  }

   /**
   * Get trackingDetails
   * @return trackingDetails
  **/
  @ApiModelProperty(value = "")
  public TrackingDetails getTrackingDetails() {
    return trackingDetails;
  }

  public void setTrackingDetails(TrackingDetails trackingDetails) {
    this.trackingDetails = trackingDetails;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    ModelPackage _package = (ModelPackage) o;
    return Objects.equals(this.scheduledPackageId, _package.scheduledPackageId) &&
        Objects.equals(this.packageDimensions, _package.packageDimensions) &&
        Objects.equals(this.packageWeight, _package.packageWeight) &&
        Objects.equals(this.packageItems, _package.packageItems) &&
        Objects.equals(this.packageTimeSlot, _package.packageTimeSlot) &&
        Objects.equals(this.packageIdentifier, _package.packageIdentifier) &&
        Objects.equals(this.invoice, _package.invoice) &&
        Objects.equals(this.packageStatus, _package.packageStatus) &&
        Objects.equals(this.trackingDetails, _package.trackingDetails);
  }

  @Override
  public int hashCode() {
    return Objects.hash(scheduledPackageId, packageDimensions, packageWeight, packageItems, packageTimeSlot, packageIdentifier, invoice, packageStatus, trackingDetails);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class ModelPackage {\n");
    
    sb.append("    scheduledPackageId: ").append(toIndentedString(scheduledPackageId)).append("\n");
    sb.append("    packageDimensions: ").append(toIndentedString(packageDimensions)).append("\n");
    sb.append("    packageWeight: ").append(toIndentedString(packageWeight)).append("\n");
    sb.append("    packageItems: ").append(toIndentedString(packageItems)).append("\n");
    sb.append("    packageTimeSlot: ").append(toIndentedString(packageTimeSlot)).append("\n");
    sb.append("    packageIdentifier: ").append(toIndentedString(packageIdentifier)).append("\n");
    sb.append("    invoice: ").append(toIndentedString(invoice)).append("\n");
    sb.append("    packageStatus: ").append(toIndentedString(packageStatus)).append("\n");
    sb.append("    trackingDetails: ").append(toIndentedString(trackingDetails)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(java.lang.Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }

}

